package root.repositorios;

import java.util.ArrayList;
import java.util.List;

import root.plumbum2.Usuario;

/**
 * 
 * Classe que representa um repositorio onde sao guardados usuarios.
 * 
 */
public class RepositorioUsuario implements RepositorioInterface<Usuario> {

	private List<Usuario> repositorioUsuario = new ArrayList<Usuario>();

	/**
	 * Insere um usuario no repositorio.
	 */
	@Override
	public void insert(Usuario o) {
		this.repositorioUsuario.add(o);

	}

	/**
	 * Remove um usuario do repositorio.
	 */
	@Override
	public void remove(Usuario o) {
		this.repositorioUsuario.remove(o);
	}

	/**
	 * Procura por um usuario que esteja no repositorio.
	 * 
	 * @param Usuario
	 *            a ser procurado
	 * @return Usuario ou null caso nao encontre.
	 */
	@Override
	public Usuario search(Usuario o) {
		Usuario user = null;
		for (Usuario u : this.repositorioUsuario) {
			if (u.getLogin().equals(o.getLogin()))
				user = u;
		}

		return user;
	}

	/**
	 * Procura um usuario recebendo apenas seu login.
	 * 
	 * @param login
	 *            Login do usuario a ser procurado.
	 * @return Usuario ou null caso nao encontre.
	 */
	public Usuario searchLogin(String login) {
		Usuario user = null;
		for (Usuario u : this.repositorioUsuario) {
			if (u.getLogin().equals(login))
				user = u;
		}
		return user;
	}

	/**
	 * Procura um Usuario por meio de um login e uma palavra chave.
	 * 
	 * @param login
	 *            Login do usuario a ser procurado.
	 * @param chave
	 *            Palavra-chave
	 * @return Lista de usuarios que sao relevantes a palava-chave ou ao login
	 *         passado.
	 */
	public List<Usuario> search(String login, String chave) {
		List<Usuario> listaUser = new ArrayList<Usuario>();
		for (Usuario u : this.repositorioUsuario) {
			if (u.getNome().toLowerCase().contains(chave.toLowerCase())
					|| u.getEndereco().toLowerCase()
							.contains(chave.toLowerCase())) {
				if (!u.getLogin().equals(login)) {
					listaUser.add(u);
				}

			}
		}
		return listaUser;
	}

	@Override
	public List<Usuario> getRepositorio() {
		return this.repositorioUsuario;
	}

}
